package service

import (
	"github.com/gomodule/redigo/redis"
	"github.com/pkg/errors"
	"nft-server/db"
)

const (
	// 单位：秒
	aliveTime = 30 * 60
	prefix    = "AssetUrl"
)

// Get 获取cache中的图片URL
func GetAssetPicUrl(collection, id, savaUrl string) (string, error) {

	// 从redis中获取图片的URL
	key := prefix + collection + "#" + id

	exists, err := redis.Bool(db.Exists(key))
	if err != nil {
		return "", errors.Errorf("get assetPicUrl error: %v", err)
	}

	// redis中没有缓存相关数据
	if !exists {
		pictureUrl, err := getPictureUrl(savaUrl)
		if err != nil {
			return "", errors.Errorf("read obs for assetPicUrl error: %v", err)
		}
		// redis中存入数据
		if err := db.SetRedisKeyValue(key, pictureUrl, aliveTime); err != nil {
			return "", errors.Errorf(" redis set assetPicUrl error: %v", err)
		}
		return pictureUrl, nil
	}
	url, err := redis.String(db.GetRedisValue(key))
	if err != nil {
		return "", errors.Errorf("read redis for assetPicUrl error: %v", err)
	}
	return url, nil
}

// 从obs服务获取资产图片的URL
func getPictureUrl(savaUrl string) (string, error) {
	url, err := GetAssetWebURl(savaUrl)
	if err != nil {
		return "", errors.Errorf("ReadOBS error: %v", err)
	}
	return url, nil
}
